// 用户先登录，登录成功之后拿到token，然后再保存token到本地
import 'dart:io';

void main() async {
  print('开始执行main函数');

  // 不会阻塞逻辑执行的
  // loginFunc();

  // 如果需要阻塞 用 await 修饰
  var f1 = await loginFunc();
  print(f1);

  print('这是不能被阻塞的代码');
}

// async 修改函数
// 返回的是 future 对象，可以继续用 await 等待
// 实际开发时根据需求选择逻辑的编写即可
loginFunc() async {
  // 通过 await 等待 future 的结果，并赋值给左边
  // 函数内部会被阻塞，依次执行
  String loginRes = await login();
  print('登录结果为:$loginRes');
  String tokenRes = await setToken(loginRes);
  print('token 的保存结果为:$tokenRes');
}

// 1. 模拟耗时的登录操作
Future<String> login() {
  return Future(() {
    print('开始登录~~~');
    sleep(Duration(seconds: 3));
    print('假装登录成功~~~');
    String token = 'Login-token';
    return token;
  });
}

// 2. 模拟耗时的本地存储操作
Future<String> setToken(String token) {
  return Future(() {
    print('开始保存 token~~~');
    sleep(Duration(seconds: 3));
    print('token 保存成功~~~');
    return 'ok';
  });
}
